package org.tio.im.common.utils;

import java.math.BigDecimal;

import org.tio.im.common.packets.User;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class Coast {
	/**
	 * 原始相合度JSON串
	 */
	private final static String json = "{'AE-1':{'BC':70,'AB':60,'CD':50,'DE':40,'BD':70,'AC':60,'CE':50,'BE':70,'AD':60,'AE':60,'EA':80,'EB':90,'DA':40,'EC':80,'CA':50,'DB':40,'ED':100,'BA':90,'CB':50,'DC':40},'AD-0':{'BC':80,'AB':60,'CD':50,'DE':40,'BD':80,'AC':60,'CE':50,'BE':100,'AD':60,'AE':60,'EA':70,'EB':70,'DA':40,'EC':90,'CA':50,'DB':40,'BA':90,'ED':70,'CB':50,'DC':40},'AC-1':{'BC':70,'AB':60,'CD':50,'DE':40,'BD':90,'AC':60,'CE':50,'BE':70,'AD':60,'AE':60,'EA':90,'EB':100,'DA':40,'EC':80,'CA':50,'DB':40,'ED':80,'BA':70,'CB':50,'DC':40},'AE-0':{'BC':80,'AB':60,'CD':50,'DE':40,'BD':80,'AC':60,'CE':50,'BE':90,'AD':60,'AE':60,'EA':90,'EB':70,'DA':40,'EC':70,'CA':50,'DB':40,'BA':100,'ED':70,'CB':50,'DC':40},'AD-1':{'BC':70,'AB':60,'CD':50,'DE':40,'BD':70,'AC':60,'CE':50,'BE':90,'AD':60,'AE':60,'EA':80,'EB':90,'DA':40,'EC':100,'CA':50,'DB':40,'ED':80,'BA':70,'CB':50,'DC':40},'CE-1':{'BC':90,'DE':70,'CD':60,'AB':40,'BD':100,'CE':60,'AC':40,'BE':80,'AD':40,'AE':40,'EA':50,'DA':90,'EB':50,'DB':70,'CA':60,'EC':50,'BA':80,'DC':70,'CB':60,'ED':50},'AB-0':{'BC':100,'AB':60,'CD':50,'DE':40,'BD':80,'AC':60,'CE':50,'BE':90,'AD':60,'AE':60,'EA':90,'EB':70,'DA':40,'EC':70,'CA':50,'DB':40,'BA':80,'ED':70,'CB':50,'DC':40},'CE-0':{'DE':80,'BC':70,'CD':60,'AB':40,'BD':90,'CE':60,'AC':40,'BE':70,'AD':40,'AE':40,'EA':50,'DA':100,'EB':50,'DB':90,'CA':60,'EC':50,'DC':80,'BA':70,'CB':60,'ED':50},'CD-1':{'BC':100,'DE':90,'CD':60,'AB':40,'BD':90,'CE':60,'AC':40,'BE':80,'AD':40,'AE':40,'EA':50,'DA':70,'EB':50,'DB':70,'CA':60,'EC':50,'BA':80,'DC':70,'CB':60,'ED':50},'AC-0':{'BC':80,'AB':60,'CD':50,'DE':40,'BD':100,'AC':60,'CE':50,'BE':90,'AD':60,'AE':60,'EA':70,'EB':90,'DA':40,'EC':70,'CA':50,'DB':40,'BA':80,'ED':70,'CB':50,'DC':40},'CD-0':{'DE':100,'BC':90,'CD':60,'AB':40,'BD':70,'CE':60,'AC':40,'BE':70,'AD':40,'AE':40,'EA':50,'DA':80,'EB':50,'DB':90,'CA':60,'EC':50,'DC':80,'BA':70,'CB':60,'ED':50},'AB-1':{'BC':90,'AB':60,'CD':50,'DE':40,'BD':70,'AC':60,'CE':50,'BE':70,'AD':60,'AE':60,'EA':100,'EB':90,'DA':40,'EC':80,'CA':50,'DB':40,'ED':80,'BA':70,'CB':50,'DC':40},'CB-1':{'BC':80,'DE':70,'CD':60,'AB':40,'BD':90,'CE':60,'AC':40,'BE':80,'AD':40,'AE':40,'EA':50,'DA':70,'EB':50,'DB':70,'CA':60,'EC':50,'BA':100,'DC':90,'CB':60,'ED':50},'CB-0':{'DE':80,'BC':70,'CD':60,'AB':40,'BD':70,'CE':60,'AC':40,'BE':70,'AD':40,'AE':40,'EA':50,'DA':80,'EB':50,'DB':90,'CA':60,'EC':50,'DC':100,'BA':90,'CB':60,'ED':50},'CA-1':{'BC':80,'DE':70,'CD':60,'AB':40,'BD':90,'CE':60,'AC':40,'BE':100,'AD':40,'AE':40,'EA':50,'DA':70,'EB':50,'DB':90,'CA':60,'EC':50,'BA':80,'DC':70,'CB':60,'ED':50},'CA-0':{'DE':80,'BC':70,'CD':60,'AB':40,'BD':70,'CE':60,'AC':40,'BE':90,'AD':40,'AE':40,'EA':50,'DA':80,'EB':50,'DB':100,'CA':60,'EC':50,'DC':90,'BA':70,'CB':60,'ED':50},'EA-0':{'AB':100,'DE':90,'BC':50,'CD':40,'AC':80,'BD':50,'CE':40,'AD':90,'BE':50,'AE':80,'EA':60,'DA':70,'EB':60,'DB':70,'EC':60,'CA':40,'DC':70,'ED':60,'BA':50,'CB':40},'EB-0':{'AB':80,'DE':70,'BC':50,'CD':40,'AC':100,'BD':50,'CE':40,'AD':90,'BE':50,'AE':80,'EA':60,'DA':90,'EB':60,'DB':70,'EC':60,'CA':40,'DC':70,'ED':60,'BA':50,'CB':40},'EA-1':{'DE':100,'AB':90,'BC':50,'CD':40,'AC':70,'BD':50,'CE':40,'AD':70,'BE':50,'AE':70,'EA':60,'DA':90,'EB':60,'DB':80,'EC':60,'CA':40,'DC':80,'ED':60,'BA':50,'CB':40},'EC-0':{'AB':80,'DE':70,'BC':50,'CD':40,'AC':80,'BD':50,'CE':40,'AD':100,'BE':50,'AE':90,'EA':60,'DA':70,'EB':60,'DB':90,'EC':60,'CA':40,'DC':70,'ED':60,'BA':50,'CB':40},'EB-1':{'DE':90,'AB':70,'BC':50,'CD':40,'AC':90,'BD':50,'CE':40,'AD':70,'BE':50,'AE':70,'EA':60,'DA':100,'EB':60,'DB':80,'EC':60,'CA':40,'DC':80,'ED':60,'BA':50,'CB':40},'ED-0':{'AB':80,'DE':70,'BC':50,'CD':40,'AC':80,'BD':50,'CE':40,'AD':90,'BE':50,'AE':100,'EA':60,'DA':70,'EB':60,'DB':70,'EC':60,'CA':40,'DC':90,'ED':60,'BA':50,'CB':40},'EC-1':{'DE':80,'AB':70,'BC':50,'CD':40,'AC':70,'BD':50,'CE':40,'AD':90,'BE':50,'AE':70,'EA':60,'DA':90,'EB':60,'DB':100,'EC':60,'CA':40,'DC':80,'ED':60,'BA':50,'CB':40},'ED-1':{'DE':80,'AB':70,'BC':50,'CD':40,'AC':70,'BD':50,'CE':40,'AD':70,'BE':50,'AE':90,'EA':60,'DA':90,'EB':60,'DB':80,'EC':60,'CA':40,'DC':100,'ED':60,'BA':50,'CB':40},'BE-1':{'AB':80,'CD':70,'BC':50,'DE':40,'AC':90,'CE':70,'BD':50,'AD':100,'BE':50,'AE':80,'EA':60,'EB':60,'DA':40,'CA':90,'EC':60,'DB':40,'CB':70,'ED':60,'BA':50,'DC':40},'BE-0':{'CD':80,'AB':70,'BC':50,'DE':40,'CE':80,'AC':70,'BD':50,'AD':90,'BE':50,'AE':70,'EA':60,'EB':60,'DA':40,'CA':100,'EC':60,'DB':40,'CB':90,'ED':60,'BA':50,'DC':40},'BD-1':{'AB':90,'CD':70,'BC':50,'DE':40,'AC':100,'CE':90,'BD':50,'AD':80,'BE':50,'AE':80,'EA':60,'EB':60,'DA':40,'CA':70,'EC':60,'DB':40,'CB':70,'ED':60,'BA':50,'DC':40},'BD-0':{'CD':80,'AB':70,'BC':50,'DE':40,'CE':100,'AC':90,'BD':50,'AD':70,'BE':50,'AE':70,'EA':60,'EB':60,'DA':40,'CA':90,'EC':60,'DB':40,'CB':80,'ED':60,'BA':50,'DC':40},'BC-1':{'AB':100,'CD':90,'BC':50,'DE':40,'AC':90,'CE':70,'BD':50,'AD':80,'BE':50,'AE':80,'EA':60,'EB':60,'DA':40,'CA':70,'EC':60,'DB':40,'CB':70,'ED':60,'BA':50,'DC':40},'DE-1':{'CD':100,'BC':60,'AB':50,'DE':40,'CE':90,'BD':60,'AC':50,'BE':60,'AD':50,'AE':50,'EA':90,'EB':70,'DA':40,'CA':80,'EC':70,'DB':40,'CB':80,'ED':70,'BA':60,'DC':40},'BC-0':{'CD':100,'AB':90,'BC':50,'DE':40,'CE':80,'AC':70,'BD':50,'AD':70,'BE':50,'AE':70,'EA':60,'EB':60,'DA':40,'CA':90,'EC':60,'DB':40,'CB':80,'ED':60,'BA':50,'DC':40},'DE-0':{'CD':90,'BC':60,'AB':50,'DE':40,'CE':70,'BD':60,'AC':50,'BE':60,'AD':50,'AE':50,'EA':100,'EB':80,'DA':40,'EC':90,'CA':70,'DB':40,'ED':80,'CB':70,'BA':60,'DC':40},'BA-0':{'CD':80,'AB':70,'BC':50,'DE':40,'CE':80,'AC':70,'BD':50,'AD':70,'BE':50,'AE':90,'EA':60,'EB':60,'DA':40,'CA':90,'EC':60,'DB':40,'CB':100,'ED':60,'BA':50,'DC':40},'DC-1':{'CD':80,'DE':60,'AB':50,'BC':40,'CE':90,'AC':50,'BD':40,'AD':50,'BE':40,'AE':50,'EA':70,'EB':70,'DA':60,'CA':80,'EC':70,'DB':60,'CB':100,'ED':90,'DC':60,'BA':40},'DC-0':{'CD':70,'DE':60,'AB':50,'BC':40,'CE':70,'AC':50,'BD':40,'AD':50,'BE':40,'AE':50,'EA':80,'EB':80,'DA':60,'EC':90,'CA':70,'DB':60,'ED':100,'CB':90,'DC':60,'BA':40},'BA-1':{'AB':80,'CD':70,'BC':50,'DE':40,'AC':90,'CE':70,'BD':50,'AD':80,'BE':50,'AE':100,'EA':60,'EB':60,'DA':40,'CA':70,'EC':60,'DB':40,'CB':90,'ED':60,'BA':50,'DC':40},'DB-1':{'CD':80,'DE':60,'AB':50,'BC':40,'CE':90,'AC':50,'BD':40,'AD':50,'BE':40,'AE':50,'EA':70,'EB':70,'DA':60,'CA':100,'EC':90,'DB':60,'CB':80,'ED':70,'DC':60,'BA':40},'DB-0':{'CD':70,'DE':60,'AB':50,'BC':40,'CE':70,'AC':50,'BD':40,'AD':50,'BE':40,'AE':50,'EA':80,'EB':80,'DA':60,'EC':100,'CA':90,'DB':60,'ED':90,'CB':70,'DC':60,'BA':40},'DA-1':{'CD':90,'DE':60,'AB':50,'BC':40,'CE':100,'AC':50,'BD':40,'AD':50,'BE':40,'AE':50,'EA':70,'EB':90,'DA':60,'CA':80,'EC':70,'DB':60,'CB':80,'ED':70,'DC':60,'BA':40},'DA-0':{'CD':70,'DE':60,'AB':50,'BC':40,'CE':90,'AC':50,'BD':40,'AD':50,'BE':40,'AE':50,'EA':80,'EB':100,'DA':60,'EC':90,'CA':70,'DB':60,'ED':80,'CB':70,'DC':60,'BA':40}}"; 
	/**
	 * 把想和度转为json对象
	 */
	public static JSONObject jsonObject = JSON.parseObject(json);

	/**
	 * 获取综合匹配打分
	 * 
	 * @param user1
	 * @param user2
	 * @return
	 */
	public static int getAccuracy(final String compreAttr,final int gender,final Double charm,final int ywScore,final int qgScore,final int xnScore,final int yzScore,final int mlScore,final User user2) {
		double yw = accuracy(ywScore, user2.getYwScore());
		double qg = accuracy(qgScore, user2.getQgScore());
		double xn = accuracy(xnScore, user2.getXnScore());
		double yz = accuracy(yzScore, user2.getYzScore());
		double ml = accuracy(mlScore, user2.getMlScore());
		//相似度总分
		double likePoint =  (yw + qg + xn + yz + ml) / 5;
		JSONObject compareJson = jsonObject.getJSONObject(compreAttr + "-" + gender);
		//相合度
		Integer compreScore = compareJson.getInteger(user2.getCompreAttr());
		if(compreScore == null) {
			compreScore = 60;
		}
		Double friendCharm = user2.getCharm();

		int all = 0;
		if(charm != null && friendCharm != null ) {
			//颜值匹配
			double charmScore = accuracyCharm(charm, friendCharm);
			all = (int) ((likePoint + compreScore + charmScore) / 3);
		}else {
			all = (int) ((likePoint + compreScore) / 2);
		}
		return all;
	}
	public static double accuracy(int myScore, int otherScore) {
		if (otherScore == 0) {
			return 0;
		}
		int min = Math.min(myScore, otherScore);
		int max = Math.max(myScore, otherScore);
		BigDecimal small = new BigDecimal(min);
		BigDecimal big = new BigDecimal(max);
		double match = small.divide(big, 2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100;
		return match;
	}
	public static double accuracyCharm(double myScore, double otherScore) {
		if (otherScore == 0) {
			return 0;
		}
		double min = Math.min(myScore, otherScore);
		double max = Math.max(myScore, otherScore);
		BigDecimal small = new BigDecimal(min);
		BigDecimal big = new BigDecimal(max);
		double match = small.divide(big, 2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100;
		return match;
	}
}
